Built with Alectryon, running Coq+SerAPI v8.15.0+0.15.0. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
well_formed a
→ well_formed b
→ well_formed c
→ well_formed d
→ well_formed e
→ well_formed f
→ Γ ⊢ a ---> b ---> c ---> d ---> e ---> f
→ Γ ⊢ a and b and c and d and e ---> f
Σ: Signature Γ: Theory a, b, c, d, e, f: Pattern
well_formed a
→ well_formed b
→ well_formed c
→ well_formed d
→ well_formed e
→ well_formed f
→ Γ ⊢ a ---> b ---> c ---> d ---> e ---> f
→ Γ ⊢ a and b and c and d and e ---> f
Σ: Signature Γ: Theory a, b, c, d, e, f: Pattern wfa: well_formed a wfb: well_formed b wfc: well_formed c wfd: well_formed d wfe: well_formed e wff: well_formed f H: Γ ⊢ a ---> b ---> c ---> d ---> e ---> f
Γ ⊢ a and b and c and d and e ---> f
Σ: Signature Γ: Theory a, b, c, d, e, f: Pattern wfa: well_formed a wfb: well_formed b wfc: well_formed c wfd: well_formed d wfe: well_formed e wff: well_formed f H: Γ ⊢ a ---> b ---> c ---> d ---> e ---> f
well_formed (a and b and c and d and e ---> f)
Σ: Signature Γ: Theory a, b, c, d, e, f: Pattern wfa: well_formed a wfb: well_formed b wfc: well_formed c wfd: well_formed d wfe: well_formed e wff: well_formed f H: Γ ⊢ a ---> b ---> c ---> d ---> e ---> f
Γ Ⱶ
a and b and c and d and e ---> f
Σ: Signature Γ: Theory a, b, c, d, e, f: Pattern wfa: well_formed a wfb: well_formed b wfc: well_formed c wfd: well_formed d wfe: well_formed e wff: well_formed f H: Γ ⊢ a ---> b ---> c ---> d ---> e ---> f
well_formed (a and b and c and d and e ---> f)
wf_auto2.
Σ: Signature Γ: Theory a, b, c, d, e, f: Pattern wfa: well_formed a wfb: well_formed b wfc: well_formed c wfd: well_formed d wfe: well_formed e wff: well_formed f H: Γ ⊢ a ---> b ---> c ---> d ---> e ---> f
Γ Ⱶ
a and b and c and d and e ---> f
Σ: Signature Γ: Theory a, b, c, d, e, f: Pattern wfa: well_formed a wfb: well_formed b wfc: well_formed c wfd: well_formed d wfe: well_formed e wff: well_formed f H: Γ ⊢ a ---> b ---> c ---> d ---> e ---> f
Γ Ⱶ
"H1" ∶ a and b and c and d and e,
--------------------------------------
f
Σ: Signature Γ: Theory a, b, c, d, e, f: Pattern wfa: well_formed a wfb: well_formed b wfc: well_formed c wfd: well_formed d wfe: well_formed e wff: well_formed f H: Γ ⊢ a ---> b ---> c ---> d ---> e ---> f
Γ Ⱶ
"H1" ∶ a and b and c and d and e,
--------------------------------------
a and b and c and d and e
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p IHC: ∀foC : coWfpSet,
foC = frames_of_AC C
→ Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
∅ ⊆ ∅
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p IHC: ∀foC : coWfpSet,
foC = frames_of_AC C
→ Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
∅ ⊆ ∅
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p IHC: ∀foC : coWfpSet,
foC = frames_of_AC C
→ Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
false ==> false
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p IHC: ∀foC : coWfpSet,
foC = frames_of_AC C
→ Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p IHC: ∀foC : coWfpSet,
foC = frames_of_AC C
→ Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
∅ ⊆ ∅
applyreflexivity.
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p IHC: ∀foC : coWfpSet,
foC = frames_of_AC C
→ Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
∅ ⊆ ∅
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p IHC: ∀foC : coWfpSet,
foC = frames_of_AC C
→ Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
false ==> false
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p IHC: ∀foC : coWfpSet,
foC = frames_of_AC C
→ Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p IHC: ∀foC : coWfpSet,
foC = frames_of_AC C
→ Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
∅ ⊆ ∅
applyreflexivity.
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p IHC: ∀foC : coWfpSet,
foC = frames_of_AC C
→ Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
false ==> false
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p IHC: ∀foC : coWfpSet,
foC = frames_of_AC C
→ Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p IHC: ∀foC : coWfpSet,
foC = frames_of_AC C
→ Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
false ==> false
reflexivity.
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p IHC: ∀foC : coWfpSet,
foC = frames_of_AC C
→ Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p IHC: ∀foC : coWfpSet,
foC = frames_of_AC C
→ Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature p: Pattern C: Application_context Prf: well_formed p
frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
set_solver.}
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p IHC: ∀foC : coWfpSet,
foC = frames_of_AC C
→ Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC) foC: coWfpSet HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
well_formed (p $ C.[□↦⊥])
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p IHC: ∀foC : coWfpSet,
foC = frames_of_AC C
→ Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅,
KT := false, FP := foC) foC: coWfpSet HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
well_formed (p $ ⊥)
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p IHC: ∀foC : coWfpSet,
foC = frames_of_AC C
→ Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅,
KT := false, FP := foC) foC: coWfpSet HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
well_formed ⊥
all: wf_auto2.Defined.
Σ: Signature Γ: Theory C: Application_context A, B: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i
Γ ⊢i A ---> B using i
→ Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature Γ: Theory C: Application_context A, B: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i
Γ ⊢i A ---> B using i
→ Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature Γ: Theory C: Application_context A, B: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i H: Γ ⊢i A ---> B using i
Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature Γ: Theory C: Application_context A, B: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i H: Γ ⊢i A ---> B using i pf: ML_proof_system Γ (A ---> B)
Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature Γ: Theory C: Application_context A, B: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i H: Γ ⊢i A ---> B using i pf: ML_proof_system Γ (A ---> B) HWF: well_formed (A ---> B)
Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature Γ: Theory C: Application_context A, B: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i H: Γ ⊢i A ---> B using i pf: ML_proof_system Γ (A ---> B) HWF: well_formed (A ---> B) wfA: well_formed A
Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature Γ: Theory C: Application_context A, B: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i H: Γ ⊢i A ---> B using i pf: ML_proof_system Γ (A ---> B) HWF: well_formed (A ---> B) wfA: well_formed A wfB: well_formed B
Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature Γ: Theory C: Application_context A, B: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i H: Γ ⊢i A ---> B using i wfA: well_formed A wfB: well_formed B
Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature Γ: Theory C: Application_context A, B: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i
well_formed A
→ well_formed B
→ Γ ⊢i A ---> B using i
→ Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature Γ: Theory A, B: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := ∅) i WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B using i
Γ ⊢i A ---> B using i
Σ: Signature Γ: Theory C: Application_context p: Pattern Prf: well_formed p A, B: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := {[p ↾ Prf]} ∪ frames_of_AC C) i IHC: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i
→ well_formed A
→ well_formed B
→ Γ ⊢i A ---> B using i
→ Γ ⊢i C.[□↦A] ---> C.[□↦B] using i WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B using i
Γ ⊢i C.[□↦A] $ p ---> C.[□↦B] $ p using i
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p A, B: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := {[p ↾ Prf]} ∪ frames_of_AC C) i IHC: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i
→ well_formed A
→ well_formed B
→ Γ ⊢i A ---> B using i
→ Γ ⊢i C.[□↦A] ---> C.[□↦B] using i WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B using i
Γ ⊢i p $ C.[□↦A] ---> p $ C.[□↦B] using i
Σ: Signature Γ: Theory A, B: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := ∅) i WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B using i
Γ ⊢i A ---> B using i
exact H.
Σ: Signature Γ: Theory C: Application_context p: Pattern Prf: well_formed p A, B: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := {[p ↾ Prf]} ∪ frames_of_AC C) i IHC: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i
→ well_formed A
→ well_formed B
→ Γ ⊢i A ---> B using i
→ Γ ⊢i C.[□↦A] ---> C.[□↦B] using i WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B using i
Γ ⊢i C.[□↦A] $ p ---> C.[□↦B] $ p using i
Σ: Signature Γ: Theory C: Application_context p: Pattern Prf: well_formed p A, B: Pattern pi_generalized_evars: coEVarSet pi_substituted_svars: coSVarSet pi_uses_kt: bool pi_framing_patterns: coWfpSet pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := {[p ↾ Prf]} ∪ frames_of_AC C)
(ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns) IHC: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C)
(ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
→ well_formed A
→ well_formed B
→ Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns)
→ Γ ⊢i C.[□↦A] ---> C.[□↦B]
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns) WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Γ ⊢i C.[□↦A] $ p ---> C.[□↦B] $ p
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature Γ: Theory C: Application_context p: Pattern Prf: well_formed p A, B: Pattern pi_generalized_evars: coEVarSet pi_substituted_svars: coSVarSet pi_uses_kt: bool pi_framing_patterns: coWfpSet pile: ∅ ⊆ pi_generalized_evars
∧ ∅ ⊆ pi_substituted_svars
∧ false ==> pi_uses_kt
∧ {[p ↾ Prf]} ∪ frames_of_AC C
⊆ pi_framing_patterns IHC: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C)
(ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
→ well_formed A
→ well_formed B
→ Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns)
→ Γ ⊢i C.[□↦A] ---> C.[□↦B]
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns) WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Γ ⊢i C.[□↦A] $ p ---> C.[□↦B] $ p
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature Γ: Theory C: Application_context p: Pattern Prf: well_formed p A, B: Pattern pi_generalized_evars: coEVarSet pi_substituted_svars: coSVarSet pi_uses_kt: bool pi_framing_patterns: coWfpSet H0: ∅ ⊆ pi_generalized_evars H2: ∅ ⊆ pi_substituted_svars H1: false ==> pi_uses_kt H4: {[p ↾ Prf]} ∪ frames_of_AC C
⊆ pi_framing_patterns IHC: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C)
(ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
→ well_formed A
→ well_formed B
→ Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns)
→ Γ ⊢i C.[□↦A] ---> C.[□↦B]
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns) WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Γ ⊢i C.[□↦A] $ p ---> C.[□↦B] $ p
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature Γ: Theory C: Application_context p: Pattern Prf: well_formed p A, B: Pattern pi_generalized_evars: coEVarSet pi_substituted_svars: coSVarSet pi_uses_kt: bool pi_framing_patterns: coWfpSet H0: ∅ ⊆ pi_generalized_evars H2: ∅ ⊆ pi_substituted_svars H1: true H4: {[p ↾ Prf]} ∪ frames_of_AC C
⊆ pi_framing_patterns IHC: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C)
(ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
→ well_formed A
→ well_formed B
→ Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns)
→ Γ ⊢i C.[□↦A] ---> C.[□↦B]
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns) WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Γ ⊢i C.[□↦A] $ p ---> C.[□↦B] $ p
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature Γ: Theory C: Application_context p: Pattern Prf: well_formed p A, B: Pattern pi_generalized_evars: coEVarSet pi_substituted_svars: coSVarSet pi_uses_kt: bool pi_framing_patterns: coWfpSet H0: ∅ ⊆ pi_generalized_evars H2: ∅ ⊆ pi_substituted_svars H1: true H4: {[p ↾ Prf]} ∪ frames_of_AC C
⊆ pi_framing_patterns IHC: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C)
(ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
→ well_formed A
→ well_formed B
→ Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns)
→ Γ ⊢i C.[□↦A] ---> C.[□↦B]
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns) WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature Γ: Theory C: Application_context p: Pattern Prf: well_formed p A, B: Pattern pi_generalized_evars: coEVarSet pi_substituted_svars: coSVarSet pi_uses_kt: bool pi_framing_patterns: coWfpSet H0: ∅ ⊆ pi_generalized_evars H2: ∅ ⊆ pi_substituted_svars H1: true H4: {[p ↾ Prf]} ∪ frames_of_AC C
⊆ pi_framing_patterns IHC: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C)
(ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
→ well_formed A
→ well_formed B
→ Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns)
→ Γ ⊢i C.[□↦A] ---> C.[□↦B]
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns) WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
frames_of_AC C ⊆ pi_framing_patterns
set_solver.
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p A, B: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := {[p ↾ Prf]} ∪ frames_of_AC C) i IHC: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i
→ well_formed A
→ well_formed B
→ Γ ⊢i A ---> B using i
→ Γ ⊢i C.[□↦A] ---> C.[□↦B] using i WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B using i
Γ ⊢i p $ C.[□↦A] ---> p $ C.[□↦B] using i
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p A, B: Pattern pi_generalized_evars: coEVarSet pi_substituted_svars: coSVarSet pi_uses_kt: bool pi_framing_patterns: coWfpSet pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := {[p ↾ Prf]} ∪ frames_of_AC C)
(ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns) IHC: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C)
(ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
→ well_formed A
→ well_formed B
→ Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns)
→ Γ ⊢i C.[□↦A] ---> C.[□↦B]
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns) WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Γ ⊢i p $ C.[□↦A] ---> p $ C.[□↦B]
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p A, B: Pattern pi_generalized_evars: coEVarSet pi_substituted_svars: coSVarSet pi_uses_kt: bool pi_framing_patterns: coWfpSet pile: ∅ ⊆ pi_generalized_evars
∧ ∅ ⊆ pi_substituted_svars
∧ false ==> pi_uses_kt
∧ {[p ↾ Prf]} ∪ frames_of_AC C
⊆ pi_framing_patterns IHC: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C)
(ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
→ well_formed A
→ well_formed B
→ Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns)
→ Γ ⊢i C.[□↦A] ---> C.[□↦B]
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns) WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Γ ⊢i p $ C.[□↦A] ---> p $ C.[□↦B]
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p A, B: Pattern pi_generalized_evars: coEVarSet pi_substituted_svars: coSVarSet pi_uses_kt: bool pi_framing_patterns: coWfpSet H0: ∅ ⊆ pi_generalized_evars H2: ∅ ⊆ pi_substituted_svars H1: false ==> pi_uses_kt H4: {[p ↾ Prf]} ∪ frames_of_AC C
⊆ pi_framing_patterns IHC: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C)
(ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
→ well_formed A
→ well_formed B
→ Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns)
→ Γ ⊢i C.[□↦A] ---> C.[□↦B]
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns) WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Γ ⊢i p $ C.[□↦A] ---> p $ C.[□↦B]
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p A, B: Pattern pi_generalized_evars: coEVarSet pi_substituted_svars: coSVarSet pi_uses_kt: bool pi_framing_patterns: coWfpSet H0: ∅ ⊆ pi_generalized_evars H2: ∅ ⊆ pi_substituted_svars H1: true H4: {[p ↾ Prf]} ∪ frames_of_AC C
⊆ pi_framing_patterns IHC: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C)
(ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
→ well_formed A
→ well_formed B
→ Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns)
→ Γ ⊢i C.[□↦A] ---> C.[□↦B]
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns) WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Γ ⊢i p $ C.[□↦A] ---> p $ C.[□↦B]
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p A, B: Pattern pi_generalized_evars: coEVarSet pi_substituted_svars: coSVarSet pi_uses_kt: bool pi_framing_patterns: coWfpSet H0: ∅ ⊆ pi_generalized_evars H2: ∅ ⊆ pi_substituted_svars H1: true H4: {[p ↾ Prf]} ∪ frames_of_AC C
⊆ pi_framing_patterns IHC: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C)
(ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
→ well_formed A
→ well_formed B
→ Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns)
→ Γ ⊢i C.[□↦A] ---> C.[□↦B]
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns) WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature Γ: Theory p: Pattern C: Application_context Prf: well_formed p A, B: Pattern pi_generalized_evars: coEVarSet pi_substituted_svars: coSVarSet pi_uses_kt: bool pi_framing_patterns: coWfpSet H0: ∅ ⊆ pi_generalized_evars H2: ∅ ⊆ pi_substituted_svars H1: true H4: {[p ↾ Prf]} ∪ frames_of_AC C
⊆ pi_framing_patterns IHC: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C)
(ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
→ well_formed A
→ well_formed B
→ Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns)
→ Γ ⊢i C.[□↦A] ---> C.[□↦B]
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt,
FP := pi_framing_patterns) WFA: well_formed A WFB: well_formed B H: Γ ⊢i A ---> B
using (ExGen := pi_generalized_evars,
SVSubst := pi_substituted_svars,
KT := pi_uses_kt, FP := pi_framing_patterns)
frames_of_AC C ⊆ pi_framing_patterns
set_solver.Defined.
Σ: Signature Γ: Theory A: Pattern C: Application_context i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i
well_formed A
→ Γ ⊢i A using i → Γ ⊢i ! C.[□↦! A] using i
Σ: Signature Γ: Theory A: Pattern C: Application_context i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i
well_formed A
→ Γ ⊢i A using i → Γ ⊢i ! C.[□↦! A] using i
Σ: Signature Γ: Theory A: Pattern C: Application_context i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A using i
Γ ⊢i ! C.[□↦! A] using i
Σ: Signature Γ: Theory A: Pattern C: Application_context i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A using i ANNA: Γ ⊢i ! ! A using i
Γ ⊢i ! C.[□↦! A] using i
Σ: Signature Γ: Theory A: Pattern C: Application_context i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A using i ANNA: Γ ⊢i ! A ---> ⊥ using i
Γ ⊢i ! C.[□↦! A] using i
Σ: Signature Γ: Theory A: Pattern C: Application_context i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A using i ANNA: Γ ⊢i ! A ---> ⊥ using i EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i
Γ ⊢i ! C.[□↦! A] using i
Σ: Signature Γ: Theory A: Pattern C: Application_context i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A using i ANNA: Γ ⊢i ! A ---> ⊥ using i EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i PB: Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C)
Γ ⊢i ! C.[□↦! A] using i
Σ: Signature Γ: Theory A: Pattern C: Application_context i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A using i ANNA: Γ ⊢i ! A ---> ⊥ using i EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i PB: Γ ⊢i C.[□↦⊥] ---> ⊥ using i
Γ ⊢i ! C.[□↦! A] using i
Σ: Signature Γ: Theory A: Pattern C: Application_context i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A using i ANNA: Γ ⊢i ! A ---> ⊥ using i EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i PB: Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C)
ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i
Σ: Signature Γ: Theory A: Pattern C: Application_context i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A using i ANNA: Γ ⊢i ! A ---> ⊥ using i EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i PB: Γ ⊢i C.[□↦⊥] ---> ⊥ using i
Γ ⊢i ! C.[□↦! A] using i
Σ: Signature Γ: Theory A: Pattern C: Application_context i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A using i ANNA: Γ ⊢i ! A ---> ⊥ using i EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i PB: Γ ⊢i C.[□↦⊥] ---> ⊥ using i TRANS:= syllogism_meta ?Goal0?Goal1?Goal2 EF PB: Γ ⊢i C.[□↦! A] ---> ⊥ using i
Γ ⊢i ! C.[□↦! A] using i
apply TRANS.
Σ: Signature Γ: Theory A: Pattern C: Application_context i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A using i
well_formed A
Σ: Signature Γ: Theory A: Pattern C: Application_context i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A using i ANNA: Γ ⊢i ! A ---> ⊥ using i EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i PB: Γ ⊢i C.[□↦⊥] ---> ⊥ using i
well_formed C.[□↦! A]
Σ: Signature Γ: Theory A: Pattern C: Application_context i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A using i ANNA: Γ ⊢i ! A ---> ⊥ using i EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i PB: Γ ⊢i C.[□↦⊥] ---> ⊥ using i
well_formed C.[□↦⊥]
Σ: Signature Γ: Theory A: Pattern C: Application_context i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A using i ANNA: Γ ⊢i ! A ---> ⊥ using i EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i PB: Γ ⊢i C.[□↦⊥] ---> ⊥ using i
well_formed ⊥
all: wf_auto2.Defined.
Σ: Signature Γ: Theory C: Application_context A: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i
well_formed A
→ Γ ⊢i A ---> ⊥ using i → Γ ⊢i C.[□↦A] ---> ⊥ using i
Σ: Signature Γ: Theory C: Application_context A: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i
well_formed A
→ Γ ⊢i A ---> ⊥ using i → Γ ⊢i C.[□↦A] ---> ⊥ using i
Σ: Signature Γ: Theory C: Application_context A: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A ---> ⊥ using i
Γ ⊢i C.[□↦A] ---> ⊥ using i
Σ: Signature Γ: Theory C: Application_context A: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A ---> ⊥ using i FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i
Γ ⊢i C.[□↦A] ---> ⊥ using i
Σ: Signature Γ: Theory C: Application_context A: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A ---> ⊥ using i FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i BPR: Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C)
Γ ⊢i C.[□↦A] ---> ⊥ using i
Σ: Signature Γ: Theory C: Application_context A: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A ---> ⊥ using i FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i BPR: Γ ⊢i C.[□↦⊥] ---> ⊥ using i
Γ ⊢i C.[□↦A] ---> ⊥ using i
Σ: Signature Γ: Theory C: Application_context A: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A ---> ⊥ using i FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i BPR: Γ ⊢i C.[□↦⊥] ---> ⊥
using (ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C)
ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i
Σ: Signature Γ: Theory C: Application_context A: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A ---> ⊥ using i FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i BPR: Γ ⊢i C.[□↦⊥] ---> ⊥ using i
Γ ⊢i C.[□↦A] ---> ⊥ using i
Σ: Signature Γ: Theory C: Application_context A: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A ---> ⊥ using i FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i BPR: Γ ⊢i C.[□↦⊥] ---> ⊥ using i TRANS: Γ ⊢i C.[□↦A] ---> ⊥ using i
Γ ⊢i C.[□↦A] ---> ⊥ using i
exact TRANS.
Σ: Signature Γ: Theory C: Application_context A: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A ---> ⊥ using i FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i BPR: Γ ⊢i C.[□↦⊥] ---> ⊥ using i
well_formed C.[□↦A]
Σ: Signature Γ: Theory C: Application_context A: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A ---> ⊥ using i FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i BPR: Γ ⊢i C.[□↦⊥] ---> ⊥ using i
well_formed C.[□↦⊥]
Σ: Signature Γ: Theory C: Application_context A: Pattern i: ProofInfo pile: ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := frames_of_AC C) i WFA: well_formed A H: Γ ⊢i A ---> ⊥ using i FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i BPR: Γ ⊢i C.[□↦⊥] ---> ⊥ using i
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
true
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
set_solver.
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
true
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
set_solver.
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
true
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
true
reflexivity.
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
set_solver.}}Defined.
Σ: Signature Γ: Theory ϕ, ψ: Pattern
well_formed (ex , ϕ)
→ well_formed ψ
→ Γ ⊢i ψ $ (ex , ϕ) ---> (ex , ψ $ ϕ)
using BasicReasoning
Σ: Signature Γ: Theory ϕ, ψ: Pattern
well_formed (ex , ϕ)
→ well_formed ψ
→ Γ ⊢i ψ $ (ex , ϕ) ---> (ex , ψ $ ϕ)
using BasicReasoning
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
Γ ⊢i ψ $ (ex , ϕ) ---> (ex , ψ $ ϕ)
using BasicReasoning
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
ML_proof_system Γ (ψ $ (ex , ϕ) ---> (ex , ψ $ ϕ))
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
ProofInfoMeaning Γ (ψ $ (ex , ϕ) ---> (ex , ψ $ ϕ))
?pf BasicReasoning
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
ML_proof_system Γ (ψ $ (ex , ϕ) ---> (ex , ψ $ ϕ))
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
well_formed (ex , ϕ)
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
well_formed ψ
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
well_formed (ex , ϕ)
exact wfϕ.
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
well_formed ψ
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
well_formed ψ
exact wfψ.}
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
ProofInfoMeaning Γ (ψ $ (ex , ϕ) ---> (ex , ψ $ ϕ))
(Prop_ex_right Γ ϕ ψ wfϕ wfψ) BasicReasoning
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
ProofInfoMeaning Γ (ψ $ (ex , ϕ) ---> (ex , ψ $ ϕ))
(Prop_ex_right Γ ϕ ψ wfϕ wfψ) BasicReasoning
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
true
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
set_solver.
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
true
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
set_solver.
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
true
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
true
reflexivity.
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature Γ: Theory ϕ, ψ: Pattern wfϕ: well_formed (ex , ϕ) wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
set_solver.}}Defined.Tactic Notation"change""constraint""in"ident(H) :=
leti := fresh"i"in
remember_constraint as i;
eapply useGenericReasoning with (i := i) in H;
subst i;
[|(try_solve_pile)].
Σ: Signature Γ: Theory AC: Application_context p: Pattern x: evar
evar_is_fresh_in x AC.[□↦p]
→ well_formed (ex , p) = true
→ Γ
⊢i AC.[□↦ex , p] <--->
exists_quantify x AC.[□↦p^{evar:0↦x}]
using (ExGen := {[x]}, SVSubst := ∅, KT := false,
FP := frames_of_AC AC)
Σ: Signature Γ: Theory AC: Application_context p: Pattern x: evar
evar_is_fresh_in x AC.[□↦p]
→ well_formed (ex , p) = true
→ Γ
⊢i AC.[□↦ex , p] <--->
exists_quantify x AC.[□↦p^{evar:0↦x}]
using (ExGen := {[x]}, SVSubst := ∅, KT := false,
FP := frames_of_AC AC)
Σ: Signature Γ: Theory AC: Application_context p: Pattern x: evar Hx: evar_is_fresh_in x AC.[□↦p] Hwf: well_formed (ex , p) = true
(* TODO automate this. The problem is that [well_formed_app] and others do not have [= true]; that is why [auto] does not work. But [auto] is not suitable for this anyway. A better way would be to create some `simpl_well_formed` tuple, that might use the type class mechanism for extension... *)
Σ: Signature Γ: Theory AC: Application_context p0: Pattern Prf: well_formed p0 p: Pattern x: evar Hx: evar_is_fresh_in x (AC.[□↦p] $ p0) Hwf: well_formed (ex , p) = true IHAC: evar_is_fresh_in x AC.[□↦p]
→ Γ
⊢i AC.[□↦ex , p] <--->
exists_quantify x AC.[□↦p^{evar:0↦x}]
using (ExGen := {[x]}, SVSubst := ∅,
KT := false, FP :=
frames_of_AC AC) Hwfex: well_formed (ex , AC.[□↦p]) Hxfr1: evar_is_fresh_in x AC.[□↦p] Hxfrp: evar_is_fresh_in x p HxAC: x ∉ AC_free_evars AC Hwf': well_formed
(exists_quantify x AC.[□↦p^{evar:0↦x}]) Hwfeo: well_formed p^{evar:0↦x}
well_formed
(exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
Σ: Signature Γ: Theory AC: Application_context p0: Pattern Prf: well_formed p0 p: Pattern x: evar Hx: evar_is_fresh_in x (AC.[□↦p] $ p0) Hwf: well_formed (ex , p) = true IHAC: evar_is_fresh_in x AC.[□↦p]
→ Γ
⊢i AC.[□↦ex , p] <--->
exists_quantify x AC.[□↦p^{evar:0↦x}]
using (ExGen := {[x]}, SVSubst := ∅,
KT := false, FP :=
frames_of_AC AC) Hwfex: well_formed (ex , AC.[□↦p]) Hxfr1: evar_is_fresh_in x AC.[□↦p] Hxfrp: evar_is_fresh_in x p HxAC: x ∉ AC_free_evars AC Hwf': well_formed
(exists_quantify x AC.[□↦p^{evar:0↦x}]) Hwfeo: well_formed p^{evar:0↦x} Hwf'p0: well_formed
(exists_quantify x
(AC.[□↦p^{evar:0↦x}] $ p0))
(* TODO automate this. The problem is that [well_formed_app] and others do not have [= true]; that is why [auto] does not work. But [auto] is not suitable for this anyway. A better way would be to create some `simpl_well_formed` tuple, that might use the type class mechanism for extension... *)
Σ: Signature Γ: Theory p0: Pattern AC: Application_context Prf: well_formed p0 p: Pattern x: evar Hx: evar_is_fresh_in x (p0 $ AC.[□↦p]) Hwf: well_formed (ex , p) = true IHAC: evar_is_fresh_in x AC.[□↦p]
→ Γ
⊢i AC.[□↦ex , p] <--->
exists_quantify x AC.[□↦p^{evar:0↦x}]
using (ExGen := {[x]}, SVSubst := ∅,
KT := false, FP :=
frames_of_AC AC) Hwfex: well_formed (ex , AC.[□↦p]) Hxfr1: evar_is_fresh_in x AC.[□↦p] Hxfrp: evar_is_fresh_in x p HxAC: x ∉ AC_free_evars AC Hwf': well_formed
(exists_quantify x AC.[□↦p^{evar:0↦x}]) Hwfeo: well_formed p^{evar:0↦x}
well_formed
(exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
Σ: Signature Γ: Theory p0: Pattern AC: Application_context Prf: well_formed p0 p: Pattern x: evar Hx: evar_is_fresh_in x (p0 $ AC.[□↦p]) Hwf: well_formed (ex , p) = true IHAC: evar_is_fresh_in x AC.[□↦p]
→ Γ
⊢i AC.[□↦ex , p] <--->
exists_quantify x AC.[□↦p^{evar:0↦x}]
using (ExGen := {[x]}, SVSubst := ∅,
KT := false, FP :=
frames_of_AC AC) Hwfex: well_formed (ex , AC.[□↦p]) Hxfr1: evar_is_fresh_in x AC.[□↦p] Hxfrp: evar_is_fresh_in x p HxAC: x ∉ AC_free_evars AC Hwf': well_formed
(exists_quantify x AC.[□↦p^{evar:0↦x}]) Hwfeo: well_formed p^{evar:0↦x} Hwf'p0: well_formed
(exists_quantify x
(p0 $ AC.[□↦p^{evar:0↦x}]))
x ≠ E
→ well_formed p = true
→ well_formed q = true
→ Γ
⊢i ϕ^{evar:n↦x}^[[evar:E↦p]] <--->
ϕ^{evar:n↦x}^[[evar:E↦q]] using i
→ Γ
⊢i ϕ^[[evar:E↦p]]^{evar:n↦x} <--->
ϕ^[[evar:E↦q]]^{evar:n↦x} using i
x ≠ E
→ well_formed p = true
→ well_formed q = true
→ Γ
⊢i ϕ^{evar:n↦x}^[[evar:E↦p]] <--->
ϕ^{evar:n↦x}^[[evar:E↦q]] using i
→ Γ
⊢i ϕ^[[evar:E↦p]]^{evar:n↦x} <--->
ϕ^[[evar:E↦q]]^{evar:n↦x} using i
Σ: Signature Γ: Theory x: evar n: db_index ϕ, p, q: Pattern E: evar i: ProofInfo Hx: x ≠ E wfp: well_formed p = true wfq: well_formed q = true H: Γ
⊢i ϕ^{evar:n↦x}^[[evar:E↦p]] <--->
ϕ^{evar:n↦x}^[[evar:E↦q]] using i
Γ
⊢i ϕ^[[evar:E↦p]]^{evar:n↦x} <--->
ϕ^[[evar:E↦q]]^{evar:n↦x} using i
Σ: Signature Γ: Theory x: evar n: db_index ϕ, p, q: Pattern E: evar i: ProofInfo Hx: x ≠ E wfp: well_formed p = true wfq: well_formed q = true H: Γ
⊢i ϕ^{evar:n↦x}^[[evar:E↦p]] <--->
ϕ^{evar:n↦x}^[[evar:E↦q]] using i
E ≠ x
→ maximal_exists_depth_of_evar_in_pattern' depth E
ψ^{evar:n↦x} =
maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature depth: nat E: evar n: db_index x: evar ψ: Pattern HEnex: E ≠ x
maximal_exists_depth_of_evar_in_pattern' depth E
ψ^{evar:n↦x} =
maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature depth: nat E: evar n: db_index x: evar ψ: Pattern HEnex: E ≠ x
maximal_exists_depth_of_evar_in_pattern' depth E
ψ^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature E, x: evar ψ: Pattern HEnex: E ≠ x
∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern' depth E
ψ^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature E, x: evar n: db_index HEnex: E ≠ x depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E
match compare_nat n n' with
| Nat_less _ _ _ => patt_bound_evar n
| Nat_equal _ _ _ => patt_free_evar x
| Nat_greater _ _ _ => patt_bound_evar (Nat.pred n)
end = 0
Σ: Signature E, x: evar ψ1, ψ2: Pattern HEnex: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2 depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E
ψ1^[evar:n'↦patt_free_evar x]
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2
Σ: Signature E, x: evar ψ1, ψ2: Pattern HEnex: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2 depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E
ψ1^[evar:n'↦patt_free_evar x]
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2
Σ: Signature E, x: evar ψ: Pattern HEnex: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern' depth
E ψ^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth
E ψ depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ^[evar:S n'↦
patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature E, x: evar ψ: Pattern HEnex: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern' depth
E ψ^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth
E ψ depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E
ψ^[evar:n'↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature E, x: evar n: db_index HEnex: E ≠ x depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E
match compare_nat n n' with
| Nat_less _ _ _ => patt_bound_evar n
| Nat_equal _ _ _ => patt_free_evar x
| Nat_greater _ _ _ => patt_bound_evar (Nat.pred n)
end = 0
Σ: Signature E, x: evar n: db_index HEnex: E ≠ x depth: nat n': db_index e: n = n' H: compare_nat n n' = Nat_equal n n' e
(if decide (x = E) then depth else0) = 0
Σ: Signature E, x: evar n: db_index HEnex: E ≠ x depth: nat n': db_index e: n = n' H: compare_nat n n' = Nat_equal n n' e e0: x = E H0: decide (x = E) = left e0
depth = 0
Σ: Signature E: evar HEnex: E ≠ E depth: nat n': db_index H: compare_nat n' n' = Nat_equal n' n' erefl H0: decide (E = E) = left erefl
depth = 0
contradiction.
Σ: Signature E, x: evar ψ1, ψ2: Pattern HEnex: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2 depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E
ψ1^[evar:n'↦patt_free_evar x]
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2
Σ: Signature E, x: evar ψ1, ψ2: Pattern HEnex: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2 depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E
ψ1^[evar:n'↦patt_free_evar x]
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2
Σ: Signature E, x: evar ψ: Pattern HEnex: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern' depth
E ψ^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth
E ψ depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ^[evar:S n'↦
patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature E, x: evar ψ: Pattern HEnex: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern' depth
E ψ^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth
E ψ depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E
ψ^[evar:n'↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature E, x: evar ψ1, ψ2: Pattern HEnex: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2 depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E
ψ1^[evar:n'↦patt_free_evar x]
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2
Σ: Signature E, x: evar ψ1, ψ2: Pattern HEnex: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2 depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2
Σ: Signature E, x: evar ψ1, ψ2: Pattern HEnex: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2 depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2 =
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2
reflexivity.
Σ: Signature E, x: evar ψ1, ψ2: Pattern HEnex: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2 depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E
ψ1^[evar:n'↦patt_free_evar x]
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2
Σ: Signature E, x: evar ψ: Pattern HEnex: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern' depth
E ψ^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth
E ψ depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ^[evar:S n'↦
patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature E, x: evar ψ: Pattern HEnex: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern' depth
E ψ^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth
E ψ depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E
ψ^[evar:n'↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature E, x: evar ψ1, ψ2: Pattern HEnex: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2 depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E
ψ1^[evar:n'↦patt_free_evar x]
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2
Σ: Signature E, x: evar ψ1, ψ2: Pattern HEnex: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2 depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2
Σ: Signature E, x: evar ψ1, ψ2: Pattern HEnex: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern'
depth E ψ2 depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2 =
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2
reflexivity.
Σ: Signature E, x: evar ψ: Pattern HEnex: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern' depth
E ψ^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth
E ψ depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ^[evar:S n'↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature E, x: evar ψ: Pattern HEnex: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern' depth
E ψ^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth
E ψ depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E
ψ^[evar:n'↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature E, x: evar ψ: Pattern HEnex: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern' depth
E ψ^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth
E ψ depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ^[evar:S n'↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature E, x: evar ψ: Pattern HEnex: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern' depth
E ψ^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth
E ψ depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
reflexivity.
Σ: Signature E, x: evar ψ: Pattern HEnex: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern' depth
E ψ^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth
E ψ depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E
ψ^[evar:n'↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature E, x: evar ψ: Pattern HEnex: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern' depth
E ψ^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth
E ψ depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E
ψ^[evar:n'↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature E, x: evar ψ: Pattern HEnex: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_exists_depth_of_evar_in_pattern' depth
E ψ^[evar:n↦patt_free_evar x] =
maximal_exists_depth_of_evar_in_pattern' depth
E ψ depth: nat n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ =
maximal_exists_depth_of_evar_in_pattern' depth E ψ
maximal_exists_depth_of_evar_in_pattern' depth E
match compare_nat n n' with
| Nat_less _ _ _ => patt_bound_svar n
| Nat_equal _ _ _ => patt_free_svar X
| Nat_greater _ _ _ => patt_bound_svar (Nat.pred n)
end = 0
maximal_exists_depth_of_evar_in_pattern' depth E
match compare_nat n n' with
| Nat_less _ _ _ => patt_bound_svar n
| Nat_equal _ _ _ => patt_free_svar X
| Nat_greater _ _ _ => patt_bound_svar (Nat.pred n)
end = 0
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2^[svar:n'↦patt_free_svar X] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2 =
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2^[svar:n'↦patt_free_svar X] =
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2 =
maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern' depth E
ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ: Pattern
∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern' (S depth)
E ψ =
S
(maximal_exists_depth_of_evar_in_pattern' depth
E ψ)
Σ: Signature x, E: evar depth: nat Hin: E ∈ {[x]}
(if decide (x = E) then S depth else0) =
S (if decide (x = E) then depth else0)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature E: evar depth: nat Hin: E ∈ ∅
0 = 1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern'
(S (S depth)) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature x, E: evar depth: nat Hin: E ∈ {[x]}
(if decide (x = E) then S depth else0) =
S (if decide (x = E) then depth else0)
Σ: Signature x, E: evar depth: nat Hin: E ∈ {[x]} e: x = E H: decide (x = E) = left e
S depth = S depth
Σ: Signature x, E: evar depth: nat Hin: E ∈ {[x]} n: x ≠ E H: decide (x = E) = right n
0 = 1
Σ: Signature x, E: evar depth: nat Hin: E ∈ {[x]} n: x ≠ E H: decide (x = E) = right n
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature E: evar depth: nat Hin: E ∈ ∅
0 = 1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern'
(S (S depth)) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature E: evar depth: nat Hin: E ∈ ∅
0 = 1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern'
(S (S depth)) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature E: evar depth: nat Hin: E ∈ ∅
0 = 1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern'
(S (S depth)) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature E: evar depth: nat Hin: E ∈ ∅
0 = 1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern'
(S (S depth)) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature E: evar depth: nat Hin: E ∈ ∅
0 = 1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern'
(S (S depth)) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
E ∈ free_evars ψ1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
E ∈ free_evars ψ2
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
reflexivity.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∈ free_evars ψ1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∉ free_evars ψ2
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` 0 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∉ free_evars ψ2
assumption.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` 0 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∉ free_evars ψ2
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` 0 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` 0)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∉ free_evars ψ2
assumption.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` 0 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` 0)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` 0)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1) =
S
(0
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ1)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
reflexivity.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∈ free_evars ψ2
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∉ free_evars ψ1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
0
`max` S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∉ free_evars ψ1
assumption.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
0
`max` S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∉ free_evars ψ1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
0
`max` S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(0
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∉ free_evars ψ1
assumption.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
0
`max` S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(0
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ2) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
reflexivity.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
False
set_solver.}
Σ: Signature E: evar depth: nat Hin: E ∈ ∅
0 = 1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern'
(S (S depth)) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature E: evar depth: nat Hin: E ∈ ∅
0 = 1
set_solver.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern'
(S (S depth)) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
E ∈ free_evars ψ1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
E ∈ free_evars ψ2
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
reflexivity.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∈ free_evars ψ1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∉ free_evars ψ2
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` 0 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∉ free_evars ψ2
assumption.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` 0 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∉ free_evars ψ2
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` 0 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` 0)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∉ free_evars ψ2
assumption.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
`max` 0 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` 0)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` 0)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1) =
S
(0
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ1)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
reflexivity.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∈ free_evars ψ2
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1
`max` S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∉ free_evars ψ1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
0
`max` S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∉ free_evars ψ1
assumption.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
0
`max` S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∉ free_evars ψ1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
0
`max` S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(0
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∉ free_evars ψ1
assumption.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
0
`max` S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) =
S
(0
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ2) =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
reflexivity.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E
ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_exists_depth_of_evar_in_pattern'
depth E ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
False
set_solver.}
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S (S depth))
E ψ =
S
(maximal_exists_depth_of_evar_in_pattern' (S depth)
E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S (S depth))
E ψ =
S
(maximal_exists_depth_of_evar_in_pattern' (S depth)
E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
E ∈ free_evars ψ
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
S
(maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ) =
S
(maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
S
(maximal_exists_depth_of_evar_in_pattern' (S depth)
E ψ) =
S
(maximal_exists_depth_of_evar_in_pattern' (S depth)
E ψ)
reflexivity.
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
E ∈ free_evars ψ
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_exists_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ) =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ) =
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
reflexivity.}Qed.Fixpointmaximal_mu_depth_of_evar_in_pattern' (depth : nat) (E : evar) (ψ : Pattern) : nat :=
match ψ with
| patt_bott => 0
| patt_sym _ => 0
| patt_bound_evar _ => 0
| patt_bound_svar _ => 0
| patt_free_svar _ => 0
| patt_free_evar E' =>
match (decide (E' = E)) with
| left _ => depth
| right _ => 0end
| patt_imp ψ₁ ψ₂
=> Nat.max
(maximal_mu_depth_of_evar_in_pattern' depth E ψ₁)
(maximal_mu_depth_of_evar_in_pattern' depth E ψ₂)
| patt_app ψ₁ ψ₂
=> Nat.max
(maximal_mu_depth_of_evar_in_pattern' depth E ψ₁)
(maximal_mu_depth_of_evar_in_pattern' depth E ψ₂)
| patt_exists ψ' =>
maximal_mu_depth_of_evar_in_pattern' depth E ψ'
| patt_mu ψ' =>
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ'
end.Definitionmaximal_mu_depth_of_evar_in_pattern (E : evar) (ψ : Pattern) : nat :=
maximal_mu_depth_of_evar_in_pattern' 0 E ψ.
maximal_mu_depth_of_evar_in_pattern' depth E
match compare_nat n n' with
| Nat_less _ _ _ => patt_bound_svar n
| Nat_equal _ _ _ => patt_free_svar X
| Nat_greater _ _ _ => patt_bound_svar (Nat.pred n)
end = 0
maximal_mu_depth_of_evar_in_pattern' depth E
match compare_nat n n' with
| Nat_less _ _ _ => patt_bound_svar n
| Nat_equal _ _ _ => patt_free_svar X
| Nat_greater _ _ _ => patt_bound_svar (Nat.pred n)
end = 0
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[svar:n'↦patt_free_svar X] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 =
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[svar:n'↦patt_free_svar X] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 =
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
E ≠ x
→ maximal_mu_depth_of_evar_in_pattern' depth E
ψ^{evar:n↦x} =
maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature depth: nat E: evar n: db_index x: evar ψ: Pattern Hne: E ≠ x
maximal_mu_depth_of_evar_in_pattern' depth E
ψ^{evar:n↦x} =
maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature depth: nat E: evar n: db_index x: evar ψ: Pattern Hne: E ≠ x
maximal_mu_depth_of_evar_in_pattern' depth E
ψ^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature E, x: evar ψ: Pattern Hne: E ≠ x
∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature E, x: evar n: db_index Hne: E ≠ x depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E
match compare_nat n n' with
| Nat_less _ _ _ => patt_bound_evar n
| Nat_equal _ _ _ => patt_free_evar x
| Nat_greater _ _ _ => patt_bound_evar (Nat.pred n)
end = 0
Σ: Signature E, x: evar ψ1, ψ2: Pattern Hne: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2 depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n'↦patt_free_evar x]
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature E, x: evar ψ1, ψ2: Pattern Hne: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2 depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n'↦patt_free_evar x]
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature E, x: evar ψ: Pattern Hne: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E
ψ^[evar:S n'↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature E, x: evar ψ: Pattern Hne: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ^[evar:n'↦
patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature E, x: evar n: db_index Hne: E ≠ x depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E
match compare_nat n n' with
| Nat_less _ _ _ => patt_bound_evar n
| Nat_equal _ _ _ => patt_free_evar x
| Nat_greater _ _ _ => patt_bound_evar (Nat.pred n)
end = 0
Σ: Signature E, x: evar n: db_index Hne: E ≠ x depth: nat n': db_index e: n = n' H: compare_nat n n' = Nat_equal n n' e
(if decide (x = E) then depth else0) = 0
Σ: Signature E, x: evar n: db_index Hne: E ≠ x depth: nat n': db_index e: n = n' H: compare_nat n n' = Nat_equal n n' e e0: x = E H0: decide (x = E) = left e0
depth = 0
Σ: Signature E: evar Hne: E ≠ E depth: nat n': db_index H: compare_nat n' n' = Nat_equal n' n' erefl H0: decide (E = E) = left erefl
depth = 0
contradiction.
Σ: Signature E, x: evar ψ1, ψ2: Pattern Hne: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2 depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n'↦patt_free_evar x]
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature E, x: evar ψ1, ψ2: Pattern Hne: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2 depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n'↦patt_free_evar x]
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature E, x: evar ψ: Pattern Hne: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E
ψ^[evar:S n'↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature E, x: evar ψ: Pattern Hne: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ^[evar:n'↦
patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature E, x: evar ψ1, ψ2: Pattern Hne: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2 depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n'↦patt_free_evar x]
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature E, x: evar ψ1, ψ2: Pattern Hne: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2 depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature E, x: evar ψ1, ψ2: Pattern Hne: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2 depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 =
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
reflexivity.
Σ: Signature E, x: evar ψ1, ψ2: Pattern Hne: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2 depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n'↦patt_free_evar x]
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature E, x: evar ψ: Pattern Hne: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E
ψ^[evar:S n'↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature E, x: evar ψ: Pattern Hne: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ^[evar:n'↦
patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature E, x: evar ψ1, ψ2: Pattern Hne: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2 depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n'↦patt_free_evar x]
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature E, x: evar ψ1, ψ2: Pattern Hne: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2 depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n'↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature E, x: evar ψ1, ψ2: Pattern Hne: E ≠ x IHψ1: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ1 IHψ2: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E
ψ2 depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 =
maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
reflexivity.
Σ: Signature E, x: evar ψ: Pattern Hne: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E
ψ^[evar:S n'↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature E, x: evar ψ: Pattern Hne: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E
ψ^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ^[evar:n'↦
patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature E, x: evar ψ: Pattern Hne: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E
ψ^[evar:S n'↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature E, x: evar ψ: Pattern Hne: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E ψ =
maximal_mu_depth_of_evar_in_pattern' depth E ψ
reflexivity.
Σ: Signature E, x: evar ψ: Pattern Hne: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ^[evar:n'↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature E, x: evar ψ: Pattern Hne: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ^[evar:n'↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature E, x: evar ψ: Pattern Hne: E ≠ x IHψ: ∀ (depth : nat) (n : db_index),
maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] =
maximal_mu_depth_of_evar_in_pattern' depth E ψ depth: nat n': db_index
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
reflexivity.}Qed.
Σ: Signature E: evar ψ: Pattern depth: nat
E ∉ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature E: evar ψ: Pattern depth: nat
E ∉ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature E: evar depth: nat Hin: E ∈ ∅
0 = 1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature x, E: evar depth: nat Hin: E ∈ {[x]}
(if decide (x = E) then S depth else0) =
S (if decide (x = E) then depth else0)
Σ: Signature x, E: evar depth: nat Hin: E ∈ {[x]} e: x = E H: decide (x = E) = left e
S depth = S depth
Σ: Signature x, E: evar depth: nat Hin: E ∈ {[x]} n: x ≠ E H: decide (x = E) = right n
0 = 1
Σ: Signature x, E: evar depth: nat Hin: E ∈ {[x]} n: x ≠ E H: decide (x = E) = right n
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature E: evar depth: nat Hin: E ∈ ∅
0 = 1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature E: evar depth: nat Hin: E ∈ ∅
0 = 1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature E: evar depth: nat Hin: E ∈ ∅
0 = 1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature E: evar depth: nat Hin: E ∈ ∅
0 = 1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature E: evar depth: nat Hin: E ∈ ∅
0 = 1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
E ∈ free_evars ψ1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
E ∈ free_evars ψ2
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` S
(maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` S
(maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
reflexivity.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∈ free_evars ψ1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∉ free_evars ψ2
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` 0 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∉ free_evars ψ2
assumption.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` 0 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∉ free_evars ψ2
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` 0 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` 0)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∉ free_evars ψ2
assumption.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` 0 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` 0)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` 0)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) =
S
(0
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ1)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
reflexivity.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∈ free_evars ψ2
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` S
(maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` S
(maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∉ free_evars ψ1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
0
`max` S
(maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∉ free_evars ψ1
assumption.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
0
`max` S
(maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∉ free_evars ψ1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
0
`max` S
(maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(0
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∉ free_evars ψ1
assumption.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
0
`max` S
(maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(0
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
reflexivity.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
False
set_solver.}
Σ: Signature E: evar depth: nat Hin: E ∈ ∅
0 = 1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature E: evar depth: nat Hin: E ∈ ∅
0 = 1
set_solver.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
E ∈ free_evars ψ1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
E ∈ free_evars ψ2
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` S
(maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` S
(maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 e0: E ∈ free_evars ψ2
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
reflexivity.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∈ free_evars ψ1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∉ free_evars ψ2
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` 0 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∉ free_evars ψ2
assumption.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` 0 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∉ free_evars ψ2
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` 0 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` 0)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
E ∉ free_evars ψ2
assumption.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
`max` 0 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` 0)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` 0)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) =
S
(0
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ1)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 e: E ∈ free_evars ψ1 n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
reflexivity.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∈ free_evars ψ2
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` S
(maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` S
(maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∉ free_evars ψ1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
0
`max` S
(maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∉ free_evars ψ1
assumption.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
0
`max` S
(maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∉ free_evars ψ1
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
0
`max` S
(maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(0
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
E ∉ free_evars ψ1
assumption.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
0
`max` S
(maximal_mu_depth_of_evar_in_pattern' depth E
ψ2) =
S
(0
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 e: E ∈ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
reflexivity.
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' (S depth) E
ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern' depth E ψ1
`max` maximal_mu_depth_of_evar_in_pattern' depth E
ψ2)
Σ: Signature ψ1, ψ2: Pattern IHψ1: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ1
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ1 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ1) IHψ2: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ2
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ2 =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ2) E: evar depth: nat Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2 n: E ∉ free_evars ψ1 n0: E ∉ free_evars ψ2
False
set_solver.}
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
E ∈ free_evars ψ
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ) =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ) =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
reflexivity.
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
E ∈ free_evars ψ
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern'
(S depth) E ψ =
S
(maximal_mu_depth_of_evar_in_pattern'
depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ) =
S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature ψ: Pattern IHψ: ∀ (E : evar) (depth : nat),
E ∈ free_evars ψ
→ maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ =
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ) E: evar depth: nat Hin: E ∈ free_evars ψ
S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ) =
S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
reflexivity.}Qed.
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
x ≠ E
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
well_formed p = true
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
well_formed q = true
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
x ≠ E
exact HxneqE.
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
well_formed p = true
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
well_formed q = true
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
well_formed p = true
exact wfp.
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
well_formed q = true
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
well_formed q = true
exact wfq.
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
well_formed ψ^[[evar:E↦p]]^{evar:0↦x}
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
well_formed ψ^[[evar:E↦q]]^{evar:0↦x}
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
well_formed ψ^[[evar:E↦p]]^{evar:0↦x}
abstract (wf_auto2).
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
well_formed ψ^[[evar:E↦q]]^{evar:0↦x}
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
well_formed ψ^[[evar:E↦q]]^{evar:0↦x}
abstract (wf_auto2).
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
well_formed ψ^[[evar:E↦p]]^{evar:0↦x}
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
well_formed ψ^[[evar:E↦q]]^{evar:0↦x}
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
well_formed ψ^[[evar:E↦p]]^{evar:0↦x}
abstract (wf_auto2).
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
well_formed ψ^[[evar:E↦q]]^{evar:0↦x}
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
well_formed ψ^[[evar:E↦q]]^{evar:0↦x}
abstract (wf_auto2).
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]])
using gpi
(* TODO: remove the well-formedness constraints on this lemma*)
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦p]])
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦q]])
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) ---> (ex , ψ^[[evar:E↦q]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦q]]) ---> (ex , ψ^[[evar:E↦p]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦p]])
abstract (wf_auto2).
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦q]])
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) ---> (ex , ψ^[[evar:E↦q]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦q]]) ---> (ex , ψ^[[evar:E↦p]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦q]])
abstract (wf_auto2).
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) ---> (ex , ψ^[[evar:E↦q]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦q]]) ---> (ex , ψ^[[evar:E↦p]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) ---> (ex , ψ^[[evar:E↦q]])
using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
?x ∉ free_evars ψ^[[evar:E↦p]]
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed_closed_ex_aux ψ^[[evar:E↦p]] 1
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ
⊢i exists_quantify ?x ψ^[[evar:E↦p]]^{evar:0↦?x} --->
(ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ
⊢i exists_quantify ?x ψ^[[evar:E↦p]]^{evar:0↦?x} --->
(ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature Γ: Theory E: evar ψ: Pattern x: evar p, q: Pattern gpi: ProofInfo exdepth, mudepth: nat EvS: EVarSet SvS: SVarSet HxneqE: x ≠ E wfψ: well_formed (ex , ψ) wfp: well_formed p wfq: well_formed q Heqx: x = evar_fresh (elements EvS) HEinψ: E ∈ free_evars ψ i': ProofInfo p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS ψ_sub_EvS: free_evars ψ ⊆ EvS Heqi': i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅) pile: ProofInfoLe i' gpi IH: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <--->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH1: Γ
⊢i ψ^[[evar:E↦p]]^{evar:0↦x} --->
ψ^[[evar:E↦q]]^{evar:0↦x} using gpi IH2: Γ
⊢i ψ^[[evar:E↦q]]^{evar:0↦x} --->
ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
{[A ↾ wf1; B ↾ wf3; ψ2^[[evar:E↦p]] ↾ wf2;
ψ2^[[evar:E↦q]] ↾ wf4]}
⊆ gset_to_coGset
({[A ↾ wf1'; ψ2^[[evar:E↦p]] ↾ wf2'; B ↾ wf3';
ψ2^[[evar:E↦q]] ↾ wf4']}
∪ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1
ψ2 wfψ)
(frames_on_the_way_to_hole'_obligation_6 p
wfp)
(frames_on_the_way_to_hole'_obligation_7 q
wfq)
∪ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1
ψ2 wfψ)
(frames_on_the_way_to_hole'_obligation_10 p
wfp)
(frames_on_the_way_to_hole'_obligation_11 q
wfq))
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern HeqA: A = ψ1^[[evar:E↦p]] wf1: well_formed A = true C: Pattern HeqC: C = ψ2^[[evar:E↦p]] wf2: well_formed C = true B: Pattern HeqB: B = ψ1^[[evar:E↦q]] wf3: well_formed B = true wf4: well_formed ψ2^[[evar:E↦q]] = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed ψ2^[[evar:E↦q]] = true
{[A ↾ wf1; B ↾ wf3; C ↾ wf2; ψ2^[[evar:E↦q]] ↾ wf4]}
⊆ gset_to_coGset
({[A ↾ wf1'; C ↾ wf2'; B ↾ wf3';
ψ2^[[evar:E↦q]] ↾ wf4']}
∪ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1
ψ2 wfψ)
(frames_on_the_way_to_hole'_obligation_6 p
wfp)
(frames_on_the_way_to_hole'_obligation_7 q
wfq)
∪ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1
ψ2 wfψ)
(frames_on_the_way_to_hole'_obligation_10 p
wfp)
(frames_on_the_way_to_hole'_obligation_11 q
wfq))
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern HeqA: A = ψ1^[[evar:E↦p]] wf1: well_formed A = true C: Pattern HeqC: C = ψ2^[[evar:E↦p]] wf2: well_formed C = true B: Pattern HeqB: B = ψ1^[[evar:E↦q]] wf3: well_formed B = true D: Pattern HeqD: D = ψ2^[[evar:E↦q]] wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true
{[A ↾ wf1; B ↾ wf3; C ↾ wf2; D ↾ wf4]}
⊆ gset_to_coGset
({[A ↾ wf1'; C ↾ wf2'; B ↾ wf3'; D ↾ wf4']}
∪ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1
ψ2 wfψ)
(frames_on_the_way_to_hole'_obligation_6 p
wfp)
(frames_on_the_way_to_hole'_obligation_7 q
wfq)
∪ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1
ψ2 wfψ)
(frames_on_the_way_to_hole'_obligation_10 p
wfp)
(frames_on_the_way_to_hole'_obligation_11 q
wfq))
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true
{[A ↾ wf1; B ↾ wf3; C ↾ wf2; D ↾ wf4]}
⊆ gset_to_coGset
({[A ↾ wf1'; C ↾ wf2'; B ↾ wf3'; D ↾ wf4']}
∪ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1
ψ2 wfψ)
(frames_on_the_way_to_hole'_obligation_6 p
wfp)
(frames_on_the_way_to_hole'_obligation_7 q
wfq)
∪ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1
ψ2 wfψ)
(frames_on_the_way_to_hole'_obligation_10 p
wfp)
(frames_on_the_way_to_hole'_obligation_11 q
wfq))
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true
∀x : wfPattern,
((x = A ↾ wf1 ∨ x = B ↾ wf3) ∨ x = C ↾ wf2)
∨ x = D ↾ wf4
→ ((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1
ψ2 wfψ)
(frames_on_the_way_to_hole'_obligation_6 p
wfp)
(frames_on_the_way_to_hole'_obligation_7 q
wfq))
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1
ψ2 wfψ)
(frames_on_the_way_to_hole'_obligation_10 p
wfp)
(frames_on_the_way_to_hole'_obligation_11 q
wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: ((x = A ↾ wf1 ∨ x = B ↾ wf3) ∨ x = C ↾ wf2)
∨ x = D ↾ wf4
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq))
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_10 p wfp)
(frames_on_the_way_to_hole'_obligation_11 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = A ↾ wf1
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq))
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_10 p wfp)
(frames_on_the_way_to_hole'_obligation_11 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = B ↾ wf3
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq))
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_10 p wfp)
(frames_on_the_way_to_hole'_obligation_11 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = C ↾ wf2
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq))
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_10 p wfp)
(frames_on_the_way_to_hole'_obligation_11 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = D ↾ wf4
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq))
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_10 p wfp)
(frames_on_the_way_to_hole'_obligation_11 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = A ↾ wf1
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq))
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_10 p wfp)
(frames_on_the_way_to_hole'_obligation_11 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = A ↾ wf1
(((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = A ↾ wf1
((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4'
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = A ↾ wf1
(x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3'
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = A ↾ wf1
x = A ↾ wf1' ∨ x = C ↾ wf2'
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = A ↾ wf1
x = A ↾ wf1'
pi_assumption.
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = B ↾ wf3
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq))
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_10 p wfp)
(frames_on_the_way_to_hole'_obligation_11 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = C ↾ wf2
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq))
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_10 p wfp)
(frames_on_the_way_to_hole'_obligation_11 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = D ↾ wf4
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq))
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_10 p wfp)
(frames_on_the_way_to_hole'_obligation_11 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = B ↾ wf3
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq))
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_10 p wfp)
(frames_on_the_way_to_hole'_obligation_11 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = B ↾ wf3
(((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = B ↾ wf3
((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4'
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = B ↾ wf3
(x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3'
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = B ↾ wf3
x = B ↾ wf3'
pi_assumption.
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = C ↾ wf2
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq))
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_10 p wfp)
(frames_on_the_way_to_hole'_obligation_11 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = D ↾ wf4
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq))
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_10 p wfp)
(frames_on_the_way_to_hole'_obligation_11 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = C ↾ wf2
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq))
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_10 p wfp)
(frames_on_the_way_to_hole'_obligation_11 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = C ↾ wf2
(((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = C ↾ wf2
((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4'
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = C ↾ wf2
(x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3'
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = C ↾ wf2
x = A ↾ wf1' ∨ x = C ↾ wf2'
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = C ↾ wf2
x = C ↾ wf2'
pi_assumption.
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = D ↾ wf4
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq))
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_10 p wfp)
(frames_on_the_way_to_hole'_obligation_11 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = D ↾ wf4
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq))
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ2 p q
(frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_10 p wfp)
(frames_on_the_way_to_hole'_obligation_11 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = D ↾ wf4
(((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4')
∨ x
∈ frames_on_the_way_to_hole' EvS SvS E ψ1 p q
(frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2
wfψ)
(frames_on_the_way_to_hole'_obligation_6 p wfp)
(frames_on_the_way_to_hole'_obligation_7 q wfq)
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = D ↾ wf4
((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3')
∨ x = D ↾ wf4'
Σ: Signature p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar ψ1, ψ2: Pattern wfψ: well_formed (ψ1 $ ψ2) EvS: EVarSet SvS: SVarSet A: Pattern wf1: well_formed A = true C: Pattern wf2: well_formed C = true B: Pattern wf3: well_formed B = true D: Pattern wf4: well_formed D = true wf1': well_formed A = true wf2': well_formed C = true wf3': well_formed B = true wf4': well_formed D = true x: wfPattern H: x = D ↾ wf4
x = D ↾ wf4'
pi_assumption.}}
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi wfψ: well_formed ⊥ Hsz: 1 ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ⊥)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ⊥)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ⊥)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E ⊥ p
q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars ⊥ ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars ⊥ ⊆ SvS HEinψ: E ∈ free_evars ⊥
Γ ⊢i ⊥ <---> ⊥ using gpi
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ1, ψ2: Pattern wfψ: well_formed (ψ1 ---> ψ2) Hsz: S (size' ψ1 + size' ψ2) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ψ1 ---> ψ2))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ψ1 ---> ψ2))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ψ1 ---> ψ2))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]])
using gpi
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
x ≠ E
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
?i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))
then false
else true, FP := ∅)
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
ProofInfoLe ?i' gpi
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
x ≠ E
set_solver.
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
?i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E (ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true, FP := ∅)
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
ProofInfoLe ?i' gpi
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
?i' =
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E (ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true, FP := ∅)
reflexivity.
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E (ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true, FP := ∅) gpi
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E (ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true, FP := ∅) gpi
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E (ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true, FP := ∅) i'
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E (ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true, FP := ∅)
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E (ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq))
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern' exdepth
E (ex , ψ)))
⊆ list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E (ex , ψ)))
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern' mudepth E
(ex , ψ)))
⊆ list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern' mudepth E
(ex , ψ)))
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
(if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern' mudepth E
(ex , ψ))
then false
else true) ==>
(if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern' mudepth E
(ex , ψ))
then false
else true)
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
∅
⊆ gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq)
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern' exdepth
E (ex , ψ)))
⊆ list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E (ex , ψ)))
applyreflexivity.
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern' mudepth E
(ex , ψ)))
⊆ list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern' mudepth E
(ex , ψ)))
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
(if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern' mudepth E
(ex , ψ))
then false
else true) ==>
(if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern' mudepth E
(ex , ψ))
then false
else true)
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
∅
⊆ gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq)
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern' mudepth E
(ex , ψ)))
⊆ list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern' mudepth E
(ex , ψ)))
applyreflexivity.
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
(if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern' mudepth E
(ex , ψ))
then false
else true) ==>
(if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern' mudepth E
(ex , ψ))
then false
else true)
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
∅
⊆ gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq)
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
(if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern' mudepth E
(ex , ψ))
then false
else true) ==>
(if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern' mudepth E
(ex , ψ))
then false
else true)
case_match; reflexivity.
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
∅
⊆ gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q
wfψ wfp wfq)
Σ: Signature sz: nat Γ: Theory p, q: Pattern wfp: well_formed p wfq: well_formed q E: evar exdepth, mudepth: nat gpi: ProofInfo pf: Γ ⊢i p <---> q using gpi IHsz: ∀ (ψ : Pattern) (wfψ : well_formed ψ),
size' ψ ≤ sz
→ ∀ (EvS : EVarSet) (SvS : SVarSet),
ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E ψ)),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E ψ)
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
EvS SvS E ψ p q wfψ wfp wfq))
gpi
→ free_evars p ⊆ EvS
→ free_evars q ⊆ EvS
→ E ∈ EvS
→ free_evars ψ ⊆ EvS
→ free_svars p ⊆ SvS
→ free_svars q ⊆ SvS
→ free_svars ψ ⊆ SvS
→ Γ
⊢i
ψ^[[evar:E↦p]] <--->
ψ^[[evar:E↦q]] using gpi ψ: Pattern wfψ: well_formed (ex , ψ) Hsz: S (size' ψ) ≤ S sz EvS: EVarSet SvS: SVarSet i':= ExGen := list_to_set
(evar_fresh_seq EvS
(maximal_exists_depth_of_evar_in_pattern'
exdepth E
(ex , ψ))),
SVSubst := list_to_set
(svar_fresh_seq SvS
(maximal_mu_depth_of_evar_in_pattern'
mudepth E
(ex , ψ))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern'
mudepth E (ex , ψ))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E
(ex , ψ) p q wfψ wfp wfq): ProofInfo pile: ProofInfoLe i' gpi p_sub_EvS: free_evars p ⊆ EvS q_sub_EvS: free_evars q ⊆ EvS E_in_EvS: E ∈ EvS ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS p_sub_SvS: free_svars p ⊆ SvS q_sub_SvS: free_svars q ⊆ SvS ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS HEinψ: E ∈ free_evars (ex , ψ) x: evar Heqx: x = evar_fresh (elements EvS) frx: x ∉ EvS H: well_formed ψ^{evar:0↦x} H0: size' ψ^{evar:0↦x} ≤ sz IH: Γ
⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <--->
ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
∅
⊆ gset_to_coGset
(frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q
wfψ wfp wfq)
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q])
Γ Ⱶ
(a ---> foldr patt_imp (C [p]) l) <--->
(a ---> foldr patt_imp (C [q]) l)
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q])
Γ Ⱶ
((a ---> foldr patt_imp (C [p]) l) --->
a ---> foldr patt_imp (C [q]) l)
and ((a ---> foldr patt_imp (C [q]) l) --->
a ---> foldr patt_imp (C [p]) l)
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q])
Γ Ⱶ
(a ---> foldr patt_imp (C [p]) l) --->
a ---> foldr patt_imp (C [q]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q])
Γ Ⱶ
(a ---> foldr patt_imp (C [q]) l) --->
a ---> foldr patt_imp (C [p]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q])
Γ Ⱶ
(a ---> foldr patt_imp (C [p]) l) --->
a ---> foldr patt_imp (C [q]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q])
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [p]) l,
--------------------------------------
a ---> foldr patt_imp (C [q]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q])
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [p]) l,
"1" ∶ a,
--------------------------------------
foldr patt_imp (C [q]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q])
well_formed (foldr patt_imp (C [p]) l)
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [p]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [p]) l,
"1" ∶ a,
--------------------------------------
foldr patt_imp (C [p]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [p]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [p]) l,
"1" ∶ a,
"2" ∶ foldr patt_imp (C [p]) l,
--------------------------------------
foldr patt_imp (C [q]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q])
well_formed (foldr patt_imp (C [p]) l)
wf_auto2.
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [p]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [p]) l,
"1" ∶ a,
--------------------------------------
foldr patt_imp (C [p]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [p]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [p]) l,
"1" ∶ a,
"2" ∶ foldr patt_imp (C [p]) l,
--------------------------------------
foldr patt_imp (C [q]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [p]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [p]) l,
"1" ∶ a,
--------------------------------------
foldr patt_imp (C [p]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [p]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [p]) l,
"1" ∶ a,
--------------------------------------
a
using gpi
mlExactn 1.
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [p]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [p]) l,
"1" ∶ a,
"2" ∶ foldr patt_imp (C [p]) l,
--------------------------------------
foldr patt_imp (C [q]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l --->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [p]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [p]) l,
"1" ∶ a,
"2" ∶ foldr patt_imp (C [p]) l,
--------------------------------------
foldr patt_imp (C [q]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [p]) l)
well_formed (foldr patt_imp (C [p]) l)
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [p]) l)
well_formed (foldr patt_imp (C [q]) l)
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l --->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [p]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [p]) l,
"1" ∶ a,
"2" ∶ foldr patt_imp (C [p]) l,
--------------------------------------
foldr patt_imp (C [q]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l --->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [p]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [p]) l,
"1" ∶ a,
"2" ∶ foldr patt_imp (C [p]) l,
--------------------------------------
foldr patt_imp (C [p]) l
using gpi
mlExactn 2.
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q])
Γ Ⱶ
(a ---> foldr patt_imp (C [q]) l) --->
a ---> foldr patt_imp (C [p]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q])
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [q]) l,
--------------------------------------
a ---> foldr patt_imp (C [p]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q])
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [q]) l,
"1" ∶ a,
--------------------------------------
foldr patt_imp (C [p]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q])
well_formed (foldr patt_imp (C [q]) l)
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [q]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [q]) l,
"1" ∶ a,
--------------------------------------
foldr patt_imp (C [q]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [q]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [q]) l,
"1" ∶ a,
"2" ∶ foldr patt_imp (C [q]) l,
--------------------------------------
foldr patt_imp (C [p]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q])
well_formed (foldr patt_imp (C [q]) l)
wf_auto2.
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [q]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [q]) l,
"1" ∶ a,
--------------------------------------
foldr patt_imp (C [q]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [q]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [q]) l,
"1" ∶ a,
"2" ∶ foldr patt_imp (C [q]) l,
--------------------------------------
foldr patt_imp (C [p]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [q]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [q]) l,
"1" ∶ a,
--------------------------------------
foldr patt_imp (C [q]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [q]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [q]) l,
"1" ∶ a,
--------------------------------------
a
using gpi
mlExactn 1.
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [q]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [q]) l,
"1" ∶ a,
"2" ∶ foldr patt_imp (C [q]) l,
--------------------------------------
foldr patt_imp (C [p]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [q]) l --->
foldr patt_imp (C [p]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [q]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [q]) l,
"1" ∶ a,
"2" ∶ foldr patt_imp (C [q]) l,
--------------------------------------
foldr patt_imp (C [p]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [q]) l)
well_formed (foldr patt_imp (C [p]) l)
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [q]) l)
well_formed (foldr patt_imp (C [q]) l)
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [q]) l --->
foldr patt_imp (C [p]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [q]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [q]) l,
"1" ∶ a,
"2" ∶ foldr patt_imp (C [q]) l,
--------------------------------------
foldr patt_imp (C [p]) l
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx a: Pattern l: list Pattern wfp: well_formed p wfq: well_formed q wfC: PC_wf C gpi: ProofInfo pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC wfp wfq))
gpi wfa: well_formed a = true wfl: foldr andb true (map well_formed l) = true Himp: Γ ⊢i p <---> q using gpi IHl: Γ
⊢i foldr patt_imp (C [q]) l --->
foldr patt_imp (C [p]) l using gpi wfal: wf (a :: l) Hwf1: well_formed
(foldr patt_imp (C [p]) l <--->
foldr patt_imp (C [q]) l) Hwf2: well_formed (p <---> q) H: well_formed (C [p]) H0: well_formed (C [q]) Hwf: well_formed (foldr patt_imp (C [q]) l)
Γ Ⱶ
"0" ∶ a ---> foldr patt_imp (C [q]) l,
"1" ∶ a,
"2" ∶ foldr patt_imp (C [q]) l,
--------------------------------------
foldr patt_imp (C [q]) l
using gpi
mlExactn 2.Defined.
Σ: Signature Γ: Theory p, q: Pattern i: ProofInfo
Γ ⊢i p <---> q using i → well_formed p
Σ: Signature Γ: Theory p, q: Pattern i: ProofInfo
Γ ⊢i p <---> q using i → well_formed p
Σ: Signature Γ: Theory p, q: Pattern i: ProofInfo H: Γ ⊢i p <---> q using i
well_formed p
Σ: Signature Γ: Theory p, q: Pattern i: ProofInfo H: Γ ⊢i p <---> q using i H': ML_proof_system Γ (p <---> q)
well_formed p
Σ: Signature Γ: Theory p, q: Pattern i: ProofInfo H: Γ ⊢i p <---> q using i H': well_formed (p <---> q)
well_formed p
wf_auto2.Qed.
Σ: Signature Γ: Theory p, q: Pattern i: ProofInfo
Γ ⊢i p <---> q using i → well_formed q
Σ: Signature Γ: Theory p, q: Pattern i: ProofInfo
Γ ⊢i p <---> q using i → well_formed q
Σ: Signature Γ: Theory p, q: Pattern i: ProofInfo H: Γ ⊢i p <---> q using i
well_formed q
Σ: Signature Γ: Theory p, q: Pattern i: ProofInfo H: Γ ⊢i p <---> q using i H': ML_proof_system Γ (p <---> q)
well_formed q
Σ: Signature Γ: Theory p, q: Pattern i: ProofInfo H: Γ ⊢i p <---> q using i H': well_formed (p <---> q)
well_formed q
wf_auto2.Qed.
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx l: hypotheses gpi: ProofInfo wfC: PC_wf C pf: Γ ⊢i p <---> q using gpi
Γ Ⱶ
l--------------------------------------
C [q]
using gpi
→ ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪ free_evars q
∪ {[pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C) (pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p ∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C) (pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C) (pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪ free_evars q
∪ {[pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪ free_svars q)
(pcEvar C) (pcPattern C) p q wfC
(extract_wfp Γ p q gpi pf)
(extract_wfq Γ p q gpi pf))) gpi
→ Γ Ⱶ
l--------------------------------------
C [p]
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx l: hypotheses gpi: ProofInfo wfC: PC_wf C pf: Γ ⊢i p <---> q using gpi
Γ Ⱶ
l--------------------------------------
C [q]
using gpi
→ ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪ free_evars q
∪ {[pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C) (pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p ∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C) (pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C) (pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪ free_evars q
∪ {[pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪ free_svars q)
(pcEvar C) (pcPattern C) p q wfC
(extract_wfp Γ p q gpi pf)
(extract_wfq Γ p q gpi pf))) gpi
→ Γ Ⱶ
l--------------------------------------
C [p]
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx l: hypotheses gpi: ProofInfo wfC: PC_wf C Hpiffq: Γ ⊢i p <---> q using gpi
Γ Ⱶ
l--------------------------------------
C [q]
using gpi
→ ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪ free_evars q
∪ {[pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C) (pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p ∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C) (pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C) (pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪ free_evars q
∪ {[pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪ free_svars q)
(pcEvar C) (pcPattern C) p q wfC
(extract_wfp Γ p q gpi Hpiffq)
(extract_wfq Γ p q gpi Hpiffq))) gpi
→ Γ Ⱶ
l--------------------------------------
C [p]
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx l: hypotheses gpi: ProofInfo wfC: PC_wf C Hpiffq: Γ ⊢i p <---> q using gpi H: Γ Ⱶ
l--------------------------------------
C [q]
using gpi
pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC
(extract_wfp Γ p q gpi Hpiffq)
(extract_wfq Γ p q gpi Hpiffq)))
gpi
Γ Ⱶ
l--------------------------------------
C [p]
using gpi
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx l: hypotheses gpi: ProofInfo wfC: PC_wf C Hpiffq: Γ ⊢i p <---> q using gpi H: well_formed
(mlConclusion
(Γ Ⱶ
l--------------------------------------
C [q]
using gpi
))
→ wf
(patterns_of
(mlHypotheses
(Γ Ⱶ
l--------------------------------------
C [q]
using gpi
)))
→ mlTheory
(Γ Ⱶ
l--------------------------------------
C [q]
using gpi
)
⊢i foldr patt_imp
(mlConclusion
(Γ Ⱶ
l--------------------------------------
C [q]
using gpi
))
(patterns_of
(mlHypotheses
(Γ Ⱶ
l--------------------------------------
C [q]
using gpi
)))
using mlInfo
(Γ Ⱶ
l--------------------------------------
C [q]
using gpi
) pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC
(extract_wfp Γ p q gpi Hpiffq)
(extract_wfq Γ p q gpi Hpiffq)))
gpi
well_formed
(mlConclusion
(Γ Ⱶ
l--------------------------------------
C [p]
using gpi
))
→ wf
(patterns_of
(mlHypotheses
(Γ Ⱶ
l--------------------------------------
C [p]
using gpi
)))
→ mlTheory
(Γ Ⱶ
l--------------------------------------
C [p]
using gpi
)
⊢i foldr patt_imp
(mlConclusion
(Γ Ⱶ
l--------------------------------------
C [p]
using gpi
))
(patterns_of
(mlHypotheses
(Γ Ⱶ
l--------------------------------------
C [p]
using gpi
)))
using mlInfo
(Γ Ⱶ
l--------------------------------------
C [p]
using gpi
)
Σ: Signature Γ: Theory p, q: Pattern C: PatternCtx l: hypotheses gpi: ProofInfo wfC: PC_wf C Hpiffq: Γ ⊢i p <---> q using gpi H: well_formed (C [q])
→ wf (patterns_of l)
→ Γ ⊢i foldr patt_imp (C [q]) (patterns_of l)
using gpi pile: ProofInfoLe
(ExGen := list_to_set
(evar_fresh_seq
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(maximal_exists_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
SVSubst := list_to_set
(svar_fresh_seq
(free_svars (pcPattern C)
∪ free_svars p
∪ free_svars q)
(maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))),
KT := if
decide
(0 =
maximal_mu_depth_of_evar_in_pattern
(pcEvar C)
(pcPattern C))
then false
else true,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
(free_evars (pcPattern C)
∪ free_evars p ∪
free_evars q ∪ {[
pcEvar C]})
(free_svars (pcPattern C)
∪ free_svars p ∪
free_svars q)
(pcEvar C)
(pcPattern C) p q wfC
(extract_wfp Γ p q gpi Hpiffq)
(extract_wfq Γ p q gpi Hpiffq)))
gpi
well_formed a
→ well_formed a'
→ well_formed b
→ Γ ⊢ a <---> a'
→ Γ
⊢i (a $ a $ b $ a ---> patt_free_evar x) <--->
(a $ a' $ b $ a' ---> patt_free_evar x)
using AnyReasoning
Σ: Signature Γ: Theory a, a', b: Pattern x: evar
well_formed a
→ well_formed a'
→ well_formed b
→ Γ ⊢ a <---> a'
→ Γ
⊢i (a $ a $ b $ a ---> patt_free_evar x) <--->
(a $ a' $ b $ a' ---> patt_free_evar x)
using AnyReasoning
Σ: Signature Γ: Theory a, a', b: Pattern x: evar wfa: well_formed a wfa': well_formed a' wfb: well_formed b Hiff: Γ ⊢ a <---> a'
Γ
⊢i (a $ a $ b $ a ---> patt_free_evar x) <--->
(a $ a' $ b $ a' ---> patt_free_evar x)
using AnyReasoning
Σ: Signature Γ: Theory a, a', b: Pattern x: evar wfa: well_formed a wfa': well_formed a' wfb: well_formed b Hiff: Γ ⊢ a <---> a'
well_formed
((a $ a $ b $ a ---> patt_free_evar x) <--->
(a $ a' $ b $ a' ---> patt_free_evar x))
Σ: Signature Γ: Theory a, a', b: Pattern x: evar wfa: well_formed a wfa': well_formed a' wfb: well_formed b Hiff: Γ ⊢ a <---> a'
Γ Ⱶ
(a $ a $ b $ a ---> patt_free_evar x) <--->
(a $ a' $ b $ a' ---> patt_free_evar x)
Σ: Signature Γ: Theory a, a', b: Pattern x: evar wfa: well_formed a wfa': well_formed a' wfb: well_formed b Hiff: Γ ⊢ a <---> a'
well_formed
((a $ a $ b $ a ---> patt_free_evar x) <--->
(a $ a' $ b $ a' ---> patt_free_evar x))
abstract(wf_auto2).
Σ: Signature Γ: Theory a, a', b: Pattern x: evar wfa: well_formed a wfa': well_formed a' wfb: well_formed b Hiff: Γ ⊢ a <---> a'
Γ Ⱶ
(a $ a $ b $ a ---> patt_free_evar x) <--->
(a $ a' $ b $ a' ---> patt_free_evar x)
Σ: Signature Γ: Theory a, a', b: Pattern x: evar wfa: well_formed a wfa': well_formed a' wfb: well_formed b Hiff: Γ ⊢ a <---> a'
Γ Ⱶ
(a $ a' $ b $ a ---> patt_free_evar x) <--->
(a $ a' $ b $ a' ---> patt_free_evar x)
using (ExGen := ⊤, SVSubst := ⊤, KT := true, FP := ⊤)
Σ: Signature Γ: Theory a, a', b: Pattern x: evar wfa: well_formed a wfa': well_formed a' wfb: well_formed b Hiff: Γ ⊢ a <---> a'
Γ Ⱶ
(a $ a' $ b $ a ---> patt_free_evar x) <--->
(a $ a' $ b $ a ---> patt_free_evar x)
using (ExGen := ⊤, SVSubst := ⊤, KT := true, FP := ⊤)
Σ: Signature Γ: Theory a, a', b: Pattern x: evar wfa: well_formed a wfa': well_formed a' wfb: well_formed b Hiff: Γ ⊢ a <---> a'
Γ
⊢i (a $ a' $ b $ a ---> patt_free_evar x) <--->
(a $ a' $ b $ a ---> patt_free_evar x)
using (ExGen := ⊤, SVSubst := ⊤, KT := true, FP := ⊤)
Σ: Signature Γ: Theory a, a', b: Pattern x: evar wfa: well_formed a wfa': well_formed a' wfb: well_formed b Hiff: Γ ⊢ a <---> a'
Γ
⊢i (a $ a' $ b $ a ---> patt_free_evar x) <--->
(a $ a' $ b $ a ---> patt_free_evar x)
using BasicReasoning
Σ: Signature Γ: Theory a, a', b: Pattern x: evar wfa: well_formed a wfa': well_formed a' wfb: well_formed b Hiff: Γ ⊢ a <---> a'
well_formed (a $ a' $ b $ a ---> patt_free_evar x)
abstract(wf_auto2).Defined.(* TODO: de-duplicate the code *)#[local]
LtacconvertToNNF_rewrite_pat Ctx p i :=
lazymatch p with
| (! ! ?x) =>
letH' := fresh"H"inpose proof (@not_not_eq _ Ctx x ltac:(wf_auto2)) as H';
apply (@useBasicReasoning _ _ _ i) in H';
repeat (mlRewrite H' at1);
tryclear H';
convertToNNF_rewrite_pat Ctx x i
| patt_not (patt_and ?x?y) =>
letH' := fresh"H"inpose proof (@deMorgan_nand _ Ctx x y ltac:(wf_auto2) ltac:(wf_auto2)) as H';
apply (@useBasicReasoning _ _ _ i) in H';
repeat (mlRewrite H' at1);
tryclear H';
convertToNNF_rewrite_pat Ctx (!x or !y) i
| patt_not (patt_or ?x?y) =>
letH' := fresh"H"inpose proof (@deMorgan_nor _ Ctx x y ltac:(wf_auto2) ltac:(wf_auto2)) as H';
apply (@useBasicReasoning _ _ _ i) in H';
repeat (mlRewrite H' at1);
tryclear H';
convertToNNF_rewrite_pat Ctx (!x and !y) i
| patt_not (?x ---> ?y) =>
letH' := fresh"H"inpose proof (@nimpl_eq_and _ Ctx x y ltac:(wf_auto2) ltac:(wf_auto2)) as H';
apply (@useBasicReasoning _ _ _ i) in H';
repeat (mlRewrite H' at1);
tryclear H';
convertToNNF_rewrite_pat Ctx (x and !y) i
| (?x ---> ?y) =>
letH' := fresh"H"inpose proof (@impl_eq_or _ Ctx x y ltac:(wf_auto2) ltac:(wf_auto2)) as H';
apply (@useBasicReasoning _ _ _ i) in H';
repeat (mlRewrite H' at1);
tryclear H';
convertToNNF_rewrite_pat Ctx (!x or y) i
| patt_and ?x?y => convertToNNF_rewrite_pat Ctx x i; convertToNNF_rewrite_pat Ctx y i
| patt_or ?x?y => convertToNNF_rewrite_pat Ctx x i; convertToNNF_rewrite_pat Ctx y i
| _ => idtacend.#[local]
LtactoNNF :=
repeat mlRevertLast;
match goal with
| [ |- @of_MLGoal ?Sgm (@mkMLGoal ?Sgm?Ctx?ll?g?i) ]
=>
mlApplyMetaRaw (@useBasicReasoning _ _ _ i (@not_not_elim Sgm Ctx g ltac:(wf_auto2)));
convertToNNF_rewrite_pat Ctx (!g) i
end.
Σ: Signature Γ: Theory a, b: Pattern
well_formed a
→ well_formed b
→ Γ
⊢i b and (a or b) and ! b and (a or a) and a --->
⊥ using BasicReasoning
Σ: Signature Γ: Theory a, b: Pattern
well_formed a
→ well_formed b
→ Γ
⊢i b and (a or b) and ! b and (a or a) and a --->
⊥ using BasicReasoning
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
Γ ⊢i b and (a or b) and ! b and (a or a) and a ---> ⊥
using BasicReasoning
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
well_formed
(b and (a or b) and ! b and (a or a) and a ---> ⊥)
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
Γ Ⱶ
b and (a or b) and ! b and (a or a) and a ---> ⊥
using BasicReasoning
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
well_formed
(b and (a or b) and ! b and (a or a) and a ---> ⊥)
wf_auto2.
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
Γ Ⱶ
b and (a or b) and ! b and (a or a) and a ---> ⊥
using BasicReasoning
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
Γ Ⱶ
! ((b and (a or b) and ! b and (a or a) and a) and ! ⊥)
using BasicReasoning
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b H: Γ
⊢i ! (b and (a or b) and ! b and (a or a) and a --->
⊥) <--->
(b and (a or b) and ! b and (a or a) and a)
and ! ⊥ using BasicReasoning star: evar star_eq: star =
fresh_evar
(! ! (b
and (a or b)
and ! b and (a or a) and a --->
⊥)) wfC: PC_wf
{|
pcEvar := star;
pcPattern := ! patt_free_evar star
|} = true e0: 0 = 0
ProofInfoLe
(ExGen := ∅, SVSubst := ∅, KT := false,
FP := gset_to_coGset
(frames_on_the_way_to_hole'
({[star]} ∪ ∅
∪ (free_evars b ∪ ∅ ∪ ∅
∪ (free_evars a ∪ ∅ ∪ free_evars b
∪ ∅ ∪ ∅
∪ (free_evars b ∪ ∅ ∪ ∅ ∪ ∅
∪ (... ∪ ... ∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅)
∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅ ∪ ∅)
∪ (free_evars b ∪ ∅ ∪ ∅
∪ (free_evars a ∪ ∅ ∪ free_evars b
∪ ∅ ∪ ∅
∪ (... ∪ ∅ ∪ ∅ ∪ ∅
∪ (... ∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅) ∪ ∅
∪ ∅) ∪ ∅ ∪ ∅ ∪ ∅ ∪ (∅ ∪ ∅ ∪ ∅)
∪ ∅) ∪ {[star]})
(∅ ∪ ∅
∪ (free_svars b ∪ ∅ ∪ ∅
∪ (free_svars a ∪ ∅ ∪ free_svars b
∪ ∅ ∪ ∅
∪ (free_svars b ∪ ∅ ∪ ∅ ∪ ∅
∪ (... ∪ ∅ ∪ (...) ∪ ∅ ∪ ∅)
∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅ ∪ ∅)
∪ (free_svars b ∪ ∅ ∪ ∅
∪ (free_svars a ∪ ∅ ∪ free_svars b
∪ ∅ ∪ ∅
∪ (free_svars b ∪ ∅ ∪ ∅ ∪ ∅
∪ (... ∪ ... ∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅)
∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅ ∪ ∅
∪ (∅ ∪ ∅ ∪ ∅) ∪ ∅)) star
(! patt_free_evar star)
(! (b
and (a or b)
and ! b and (a or a) and a --->
⊥))
((b
and (a or b)
and ! b and (a or a) and a)
and ! ⊥) wfC
(extract_wfp Γ
(! (b
and (a or b)
and ! b and (a or a) and a --->
⊥))
((b
and (a or b)
and ! b and (a or a) and a)
and ! ⊥) BasicReasoning H)
(extract_wfq Γ
(! (b
and (a or b)
and ! b and (a or a) and a --->
⊥))
((b
and (a or b)
and ! b and (a or a) and a)
and ! ⊥) BasicReasoning H)))
BasicReasoning
Abort.#[local]
LtacrfindContradictionTo a ll k :=
match ll with
| ((mkNH _ ?name (! a)) :: ?m) =>
mlApply name; mlExactn k
| ((mkNH _ _ _) :: ?m) =>
rfindContradictionTo a m k
| _ => failend.#[local]
LtacfindContradiction l k:=
match l with
| ((mkNH _ _ ?a) :: ?m) =>
match goal with
| [ |- @of_MLGoal ?Sgm (@mkMLGoal ?Sgm?Ctx?ll?g?i) ]
=>
try rfindContradictionTo a ll k;
letkk := evalcomputein ( k + 1 ) in
(findContradiction m kk)
end
| _ => failend.#[local]
LtacfindContradiction_start :=
match goal with
| [ |- @of_MLGoal ?Sgm (@mkMLGoal ?Sgm?Ctx?l?g?i) ]
=>
match goal with
| [ |- @of_MLGoal ?Sgm (@mkMLGoal ?Sgm?Ctx?l?g?i) ]
=>
findContradiction l 0endend.#[local]
LtacbreakHyps l :=
match l with
| ((mkNH _ ?name (?xand?y)) :: ?m) =>
mlDestructAnd name
| ((mkNH _ ?name (?x or ?y)) :: ?m) =>
mlDestructOr name
| ((mkNH _ ?name?x) :: ?m) =>
breakHyps m
end.#[local]
LtacmlTautoBreak := repeatmatch goal with
| [ |- @of_MLGoal ?Sgm (@mkMLGoal ?Sgm?Ctx?l?g?i) ]
=>
lazymatch g with
| (⊥) =>
breakHyps l
| _ => mlApplyMetaRaw (@useBasicReasoning _ _ _ i (@bot_elim _ _ g _))
endend.Ltactry_solve_pile2 fallthrough :=
lazymatch goal with
| [ |- ProofInfoLe _ _] => tryapply pile_refl; try_solve_pile; fallthrough
| _ => idtacend.#[global]
LtacmlTauto :=
unshelve(
try (
toNNF; (try_solve_pile2 shelve);
repeat mlIntro;
mlTautoBreak;
findContradiction_start
)
)
.
Σ: Signature Γ: Theory a, b: Pattern
well_formed a
→ well_formed b
→ Γ
⊢i b and (a or b) and ! b and (a or a) and a --->
⊥ using AnyReasoning
Σ: Signature Γ: Theory a, b: Pattern
well_formed a
→ well_formed b
→ Γ
⊢i b and (a or b) and ! b and (a or a) and a --->
⊥ using AnyReasoning
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
Γ ⊢i b and (a or b) and ! b and (a or a) and a ---> ⊥
using AnyReasoning
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
well_formed
(b and (a or b) and ! b and (a or a) and a ---> ⊥)
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
Γ Ⱶ
b and (a or b) and ! b and (a or a) and a ---> ⊥
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
well_formed
(b and (a or b) and ! b and (a or a) and a ---> ⊥)
wf_auto2.
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
Γ Ⱶ
b and (a or b) and ! b and (a or a) and a ---> ⊥
(* TODO: fail loudly if there is something else than AnyReasoning *)mlTauto.Defined.
Σ: Signature Γ: Theory a, b: Pattern
well_formed a
→ well_formed b
→ Γ ⊢i a ---> ! a ---> b using AnyReasoning
Σ: Signature Γ: Theory a, b: Pattern
well_formed a
→ well_formed b
→ Γ ⊢i a ---> ! a ---> b using AnyReasoning
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
Γ ⊢i a ---> ! a ---> b using AnyReasoning
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
well_formed (a ---> ! a ---> b)
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
Γ Ⱶ
a ---> ! a ---> b
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
well_formed (a ---> ! a ---> b)
wf_auto2.
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
Γ Ⱶ
a ---> ! a ---> b
mlTauto.Defined.
Σ: Signature Γ: Theory a, b, c: Pattern
well_formed a
→ well_formed b
→ well_formed c
→ Γ
⊢i (a ---> b) ---> (b ---> c) ---> a or b ---> c
using AnyReasoning
Σ: Signature Γ: Theory a, b, c: Pattern
well_formed a
→ well_formed b
→ well_formed c
→ Γ
⊢i (a ---> b) ---> (b ---> c) ---> a or b ---> c
using AnyReasoning
Σ: Signature Γ: Theory a, b, c: Pattern wfa: well_formed a wfb: well_formed b wfc: well_formed c
Γ ⊢i (a ---> b) ---> (b ---> c) ---> a or b ---> c
using AnyReasoning
Σ: Signature Γ: Theory a, b, c: Pattern wfa: well_formed a wfb: well_formed b wfc: well_formed c
well_formed
((a ---> b) ---> (b ---> c) ---> a or b ---> c)
Σ: Signature Γ: Theory a, b, c: Pattern wfa: well_formed a wfb: well_formed b wfc: well_formed c
Γ Ⱶ
(a ---> b) ---> (b ---> c) ---> a or b ---> c
Σ: Signature Γ: Theory a, b, c: Pattern wfa: well_formed a wfb: well_formed b wfc: well_formed c
well_formed
((a ---> b) ---> (b ---> c) ---> a or b ---> c)
wf_auto2.
Σ: Signature Γ: Theory a, b, c: Pattern wfa: well_formed a wfb: well_formed b wfc: well_formed c
Γ Ⱶ
(a ---> b) ---> (b ---> c) ---> a or b ---> c
mlTauto. (* Slow *)Defined.
Σ: Signature Γ: Theory a: Pattern
well_formed a → Γ ⊢i ! (a and ! a) using AnyReasoning
Σ: Signature Γ: Theory a: Pattern
well_formed a → Γ ⊢i ! (a and ! a) using AnyReasoning
Σ: Signature Γ: Theory a: Pattern wfa: well_formed a
Γ ⊢i ! (a and ! a) using AnyReasoning
Σ: Signature Γ: Theory a: Pattern wfa: well_formed a
well_formed (! (a and ! a))
Σ: Signature Γ: Theory a: Pattern wfa: well_formed a
Γ Ⱶ
! (a and ! a)
Σ: Signature Γ: Theory a: Pattern wfa: well_formed a
well_formed (! (a and ! a))
wf_auto2.
Σ: Signature Γ: Theory a: Pattern wfa: well_formed a
Γ Ⱶ
! (a and ! a)
mlTauto.Defined.
Σ: Signature Γ: Theory a: Pattern
well_formed a → Γ ⊢i ! ! a ---> a using AnyReasoning
Σ: Signature Γ: Theory a: Pattern
well_formed a → Γ ⊢i ! ! a ---> a using AnyReasoning
Σ: Signature Γ: Theory a: Pattern wfa: well_formed a
Γ ⊢i ! ! a ---> a using AnyReasoning
Σ: Signature Γ: Theory a: Pattern wfa: well_formed a
well_formed (! ! a ---> a)
Σ: Signature Γ: Theory a: Pattern wfa: well_formed a
Γ Ⱶ
! ! a ---> a
Σ: Signature Γ: Theory a: Pattern wfa: well_formed a
well_formed (! ! a ---> a)
wf_auto2.
Σ: Signature Γ: Theory a: Pattern wfa: well_formed a
Γ Ⱶ
! ! a ---> a
mlTauto.Defined.
Σ: Signature Γ: Theory a, b: Pattern
well_formed a
→ well_formed b
→ Γ ⊢i ((a ---> b) ---> a) ---> a using AnyReasoning
Σ: Signature Γ: Theory a, b: Pattern
well_formed a
→ well_formed b
→ Γ ⊢i ((a ---> b) ---> a) ---> a using AnyReasoning
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
Γ ⊢i ((a ---> b) ---> a) ---> a using AnyReasoning
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
well_formed (((a ---> b) ---> a) ---> a)
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
Γ Ⱶ
((a ---> b) ---> a) ---> a
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b
well_formed (((a ---> b) ---> a) ---> a)
wf_auto2.
Σ: Signature Γ: Theory a, b: Pattern wfa: well_formed a wfb: well_formed b